/******************************************************************************* * Copyright (c) 2015 Jeff Martin. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public * License v3.0 which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl.html * * Contributors: * Jeff Martin - initial API and implementation ******************************************************************************/ package cuchaz.enigma.convert; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Map; import cuchaz.enigma.mapping.BehaviorEntry; import cuchaz.enigma.mapping.ClassEntry; import cuchaz.enigma.mapping.Entry; import cuchaz.enigma.mapping.FieldEntry; public class MatchesWriter { public static void writeClasses(ClassMatches matches, File file) throws IOException { try(FileWriter out = new FileWriter(file)) { for(ClassMatch match : matches) writeClassMatch(out, match); } } private static void writeClassMatch(FileWriter out, ClassMatch match) throws IOException { writeClasses(out, match.sourceClasses); out.write(":"); writeClasses(out, match.destClasses); out.write("\n"); } private static void writeClasses(FileWriter out, Iterable<ClassEntry> classes) throws IOException { boolean isFirst = true; for(ClassEntry entry : classes) { if(isFirst) isFirst = false; else out.write(","); out.write(entry.toString()); } } public static <T extends Entry> void writeMembers(MemberMatches<T> matches, File file) throws IOException { try(FileWriter out = new FileWriter(file)) { for(Map.Entry<T, T> match : matches.matches().entrySet()) writeMemberMatch(out, match.getKey(), match.getValue()); for(T entry : matches.getUnmatchedSourceEntries()) writeMemberMatch(out, entry, null); for(T entry : matches.getUnmatchedDestEntries()) writeMemberMatch(out, null, entry); for(T entry : matches.getUnmatchableSourceEntries()) writeUnmatchableEntry(out, entry); } } private static <T extends Entry> void writeMemberMatch(FileWriter out, T source, T dest) throws IOException { if(source != null) writeEntry(out, source); out.write(":"); if(dest != null) writeEntry(out, dest); out.write("\n"); } private static <T extends Entry> void writeUnmatchableEntry(FileWriter out, T entry) throws IOException { out.write("!"); writeEntry(out, entry); out.write("\n"); } private static <T extends Entry> void writeEntry(FileWriter out, T entry) throws IOException { if(entry instanceof FieldEntry) writeField(out, (FieldEntry)entry); else if(entry instanceof BehaviorEntry) writeBehavior(out, (BehaviorEntry)entry); } private static void writeField(FileWriter out, FieldEntry fieldEntry) throws IOException { out.write(fieldEntry.getClassName()); out.write(" "); out.write(fieldEntry.getName()); out.write(" "); out.write(fieldEntry.getType().toString()); } private static void writeBehavior(FileWriter out, BehaviorEntry behaviorEntry) throws IOException { out.write(behaviorEntry.getClassName()); out.write(" "); out.write(behaviorEntry.getName()); out.write(" "); if(behaviorEntry.getSignature() != null) out.write(behaviorEntry.getSignature().toString()); } }